Wail, A Marathon Sound Editor
by Charles Lechasseur


What is this?

Well, in a way, Wail is the next version of the Sound Editor. It has more features, more flexibility, and is more nicely laid out. Although it cannot do everything that SE could right now, its new features will most probably make it the sound editor of choice for professional patchmakers.

Wail began a little after SE came out. Some people suggested that I modify SE to add more features. An oft-requested feature was to be able to open files of any length, like files from Marathon-based games and the sound file for M2 for Windows. However, this was very difficult to do in SE because it had not been designed to do this. It was also pretty ill-coded. (I am even surprised I could finish it without losing my head in the maze of code.) So I decided that a rewrite was in order.

Wail 1.0 spawned out of an experiment I did with REALbasic (www.realbasic.com). It had all the features people had been asking for, but it was a little slow (REALbasic is an interpreted language, and a pretty slow one, even) and didn't have a save feature yet. Back then, RB was in early beta and was very buggy. One day I hit a snag and my project would no longer compile, so I decided to trash it altogether.

Wail 2.0 was then started using C++ and PowerPlant. I've tried to make it as flexible as possible and as user-friendly as it could be. I think I have succeeded. It is fast, sleek and powerful. Even though SE will still be needed for a while because not all functionalities are implemented in Wail yet, for most things Wail will probably become the editor of choice.


Warning

Wail is still built in DEBUG mode. This means that when it encounters an error, it'll spew out a weird error alert with all sorts of debug info. If you do get one of those, PLEASE WRITE IT DOWN and send it to me so I can try to isolate the problem. The most important things to record are error code or condition (if any), file name and line number.

Hopefully I will be able to get a non-debug build of Wail up in the near future, but since I have little free time to work on it these days, it might take a while.


How to get help

In the Wail folder, you should find a file named "Docs" which includes a little documentation of the various Wail features and how to navigate the interface. Please refer to it if needed before contacting me with a question.


Version history

2.0b1
- Initial release.

2.1b1
- Shuttle was incorrectly labeled as a release 2.0 version. It's not correctly labeled 2.1b1.
- Fixed corruption bug in Remap 8-bit code. Remapping 8-bit sounds in the 16-bit slots should no longer make Marathon crash. (Make sure all 16-bit classes are either remapped or contain valid sounds if you plan on turning 16-bit sounds on in Marathon.)
- New interface (suggested by Hamish Sanderson) to prevent panes from being moved down when zooming a window. Tell me what you think.
- New flags! Resists pitch changes and Doesn't self-abort. Where do they come from? Who knows. :) Those were hypothetically derived from Anvil's sound editing window data check boxes, but i'm not sure if and how they really work. Experiment at your own risk.
- Class-related commands now post a null action, meaning it'll clear any previously undoable action. This might prevent heavy bugs like undoing a sound action on a deleted class.
- HAS Class Names file updated.
- I didn't really have time to update the docs. They're still describing the old 2.0b1 version. I'm waiting because more interface changes are forthcoming. Stay tuned.

2.1b2
- New Shuttle Booster technology for faster shuttling. Actually, i corrected a bug that caused the shuttle to be way slower than it should. :) New shuttles should be 2 to 3 times faster!
- Still no updated docs. Stay tuned.

2.2b1
- compiled with CodeWarrior Pro4. this caused a bug which i had to fix, but the fix caused flicker when you add a class. oh well, not too much of a problem...
- fixed minor memory moving slowdown.
- cool new shuttle feature: if the shuttle finds a class with an ID of -2 in its data, it'll install it as if it had an ID of -1. this means that you can give IDs of -2 to allow the shuttle to install an empty class (which was previously impossible). useful to replace used classes with empty ones.
- previous versions of the shuttle tried to fix things up if user tried to install sounds in a sound file which contained a different number of classes (say, install a M patch in a M2 sound file). it didn't work *at all* however (it was never really tested). this should all be fixed in this version although i can't be 100% sure (since i don't really deal in such matters). if you find problems with this option, please contact me so we can work it out...
- added three new fields: chance, low pitch and high pitch. i have found these in one of Anvil's backup sound window... and i have no idea what they do. the only class defining pitches in M is Tick Chatter (182). please note that previous versions of Wail and all versions of SE wiped those fields when you saved, so if you edited your file, you might end up with zeros everywhere in those fields. i have no idea if the engine even uses them... if you have more info, please contact me.
- corrected a minor memory leak when saving a file.

2.2b2
- re-enabled AIFF export for 16-bit sounds.
- fixed the sound window's Zoom box. it should now work as expected.
- fixed the minimum height of the sound window so that it should no longer be possible to shrink it and have the sound lists be crunched. :)
- cleaned up the code a bit in order to release it to the public. it should be available shortly.

2.3b1
- new about box.
- now distributed under a BSD-style license, which makes Wail free software. in order to do this, i had to take out all contributed code and roll in my own. unfortunately, the Window menu lost some functionality in the process, but it's not so bad a tradeoff.

2.3b2
[note: this changelog was missing from the 2.3b2 version, so it might not be 100% accurate.]
- corrected the "Compare with Window" function (it relied on some contributed code which was removed in 2.3b1).

2.3b3
- fixed double-clicking on sounds in the sound list (they should play correctly now).

2.3b4
- minor fixes in the Class Names loading/unloading code.
- license bug fixed (my name was missing from the BOLD text).

2.3b5
- Can now read the M2 Demo sound file, which apparently is not in the exact same format as all the other ones i've seen so far.

2.5b1
- now ignores negative sound offsets (treats the sound class as empty). this allows Wail to open the sound file from "Marathon: RED" which had a "broken" sound class with a negative first sound offset. (the class is unused, so the engine simply ignores it.)
- probably the most important feature change in a long while: Wail now reads existing sounds directly from the file. only new sounds are stored in RAM/on disk using the VM system. sound files are kept open while Wail edits them. this speeds up the opening of sound files tremendously and helps save memory. the default allocation of the application has been reduced from 20 megs to 4 megs! :) the only drawback: saving now requires writing to a temp file, which means a bit more disk space is now needed.
- fixed class name reading. the obvious effect of this bug was that finding classes by name didn't work (i don't know exactly when it stopped working, because it is not very likely that i coded that feature and never tested it before...)
- improved support for the M2 Demo Sounds file format. the previous version did support reading such a file, but not saving it in that format, so you couldn't effectively edit the file. this version fixes that by remembering the file format and saving using that same format. the only drawback is that it's impossible to create a totally new sound file using the M2 Demo Sounds file format, but if you open an existing Demo sound file, it should now work.
- setting the Chance, Low Pitch and High Pitch values of a class now... works. (doh :)
- Wail now links against PP 1.9.3 with the official errata (i mentioned in the source distribution that this was the case, but in fact i had forgotten to apply parts of the errata on my workstation here at home). the only visible change is that the tab control in the Preferences dialog should look nicer (the inactive part on the right looked weird before).
- the Chance field is now set via a popup menu with possible values ranging from 10% to 100%.
- the images found in the Docs text file have been shrunk down in size.
- chance, low pitch and high pitch are now explained in more details in the Docs. i've taken the explanations directly from the M2 source code (more or less); they haven't been verified, but it's better than no explanation at all.
- added a "Find class by number" option in the "Class" menu.
- sound window is now 3 pixels smaller vertically. this makes nice auto-scrolling in the class list box.
- "Ignore case" option when searching classes by name. it now defaults to ON (previously, search was case sensitive and you couldn't change that).
- "Exact match" option when searching classes by name. it now defaults to OFF (previously, search was looking for exact matches and you couldn't change that).
- Reverting a sound file to its last saved state would leave the application in a state where menus stopped responding until the focus was given to some control inside a window. this has been fixed. (it was being triggered when Saving now, due to changes in the loading/saving code.)
- added support for Navigation Services on systems that support it. older systems still use the good ol' Standard File dialogs.
- the Class Names prefs dialog section now shows the full path to the Class Names file. this makes it easier to actually know which file named "Class Names" is the target.
- fixed small memory leak when loading a sound file.
- the Class Names file is now saved using an alias in the preferences. this allows for more flexibility: if the file is moved, it will usually be found again pretty easily.
- adding and removing sound classes is now undoable. (yay!)
- added confirmation dialog when removing a sound class (with the usual "don't show again" checkbox; can also be disabled in the prefs.)


How to contact me

I am always happy to hear from users. Be it to report bugs, suggest new features or just say hello, please don't feel embarrassed about sending me e-mails. I will try to answer you to the best of my knowledge. My e-mail address is danov@videotron.ca.

If you are interested in learning more about my other Marathon utils, come see my web page at
http://pages.infinit.net/danov/marathon/.


Disclaimer

This program is distributed under a BSD-like free software license. Please see the accompanying LICENSE file for details. If you redistribute this binary build, please include the entire package along with the license and ReadMe files.

The latest version of the Wail source can be found at my web site, above.


Special Thanks

Before I conclude, I'd like to thank a few important people who helped me during the lenghty development stage. First, I'd like to salute and thank Visdes (Richard Bushey) for the very cool Wail icon. Next, I'd like to mention the beta-testers whose feedback contributed to the refining and tune-up of the Wail application:

Christopher Veres
Hamish Sanderson
Bill Catambay

To all others who also helped during development, if I forgot to mention your name here, please do write me so I can correct it.

One last note: I cannot knowingly release Wail without thanking Bo Lindbergh. Although he did not contribute to the code itself, Wail's window layout was heavily inspired by a layout he once made, for a sound editor he was planning on his own. (I don't think his editor made it past that diagram, but he was the main inspiration behind my trying to better the Sound Editor. Thanks, Bo.)


1999-2002, Charles Lechasseur